package cn.mujiankeji.mbrowser.界面.标签页.主页

import androidx.compose.material3.DrawerState
import androidx.compose.material3.DrawerValue
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import cn.mujiankeji.mbrowser.app.应用接口
import cn.mujiankeji.mbrowser.app.应用文件
import cn.mujiankeji.mbrowser.app.应用文件存储归类
import cn.mujiankeji.mbrowser.app.应用路由
import cn.mujiankeji.mbrowser.工具.JSON
import cn.mujiankeji.mbrowser.工具.操作.地址操作
import cn.mujiankeji.mbrowser.数据.枚举类.应用页面枚举
import cn.mujiankeji.mbrowser.数据.数据库.AppDatabase
import cn.mujiankeji.mbrowser.数据.数据库.DBHomeTab
import cn.mujiankeji.mbrowser.数据.配置项.应用配置
import cn.mujiankeji.mbrowser.界面.小窗页.扫码窗口状态
import cn.mujiankeji.mbrowser.界面.小窗页.请求.主页标签编辑窗口状态

import cn.mujiankeji.mbrowser.界面.框架.主视图.标签页状态
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject

class 主页标签状态() : 标签页状态(), KoinComponent {

    init {
        super.地址.value = "m:home"
        super.标题.value = "主页"
        super.图标.value = "local:主页"
    }


    private val 数据库: AppDatabase by inject()
    var 抽屉状态 = DrawerState(DrawerValue.Closed)
    var 主页样式 by mutableStateOf(runBlocking {
        try {
            JSON.decodeFromString<主页样式配置项目>(应用配置.读取主页样式().first())
        }catch (e : Exception){
            主页样式配置项目()
        }
    })
    var 保存样式延迟 : Job ?= null
    fun 保存样式(){
       coroutine?.launch {
           try {
               if (保存样式延迟 != null) {
                   保存样式延迟?.cancel()
                   保存样式延迟 = null
               }
           }catch (e : Exception){
               e.printStackTrace()
           }
           保存样式延迟 = launch {
               delay(150)
               应用配置.设置主页样式(JSON.encodeToString(主页样式))
               保存样式延迟 = null
           }

       }
    }


    
    // 标签数据
    var 标签列表 = mutableStateListOf<DBHomeTab>()

    // 编辑状态管理
    var 编辑模式 by mutableStateOf(false)
    var coroutine : CoroutineScope ?= null

    
    // 加载标签数据
    suspend fun 加载标签() {
        // 加载顶层标签（不在组内的标签）
        数据库.主页标签().获取所有非组标签().collect {
            标签列表.clear()
            标签列表.addAll(it)
        }
    }

    // 删除标签
    fun 删除标签(id: Long) {
        coroutine?.launch {
            应用文件.删除图片(应用文件存储归类.主页标签,id)
            数据库.主页标签().删除(id)
        }
    }

    // 打开
    fun 打开(item : DBHomeTab){
        应用路由.加载(item.链接URL)
    }

    fun 请求编辑项目(item : DBHomeTab){
        主页标签编辑窗口状态(item).显示()
    }

    fun 请求创建项目(){
        主页标签编辑窗口状态().显示()
    }

    fun 响应下滑(){
        进入搜索()
    }
    
    // 搜索和扫码功能保持不变
    fun 进入搜索(){
        应用路由.加载(应用页面枚举.搜索输入)
    }

    fun 进入扫码页(){
        扫码窗口状态(){
            if (地址操作.是否有效URL(it)){
                应用路由.加载(it)
            }else{
                应用接口.搜索(it)
            }
        }.显示()
    }
}